package com.seeTools.next.service;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Collection;
import java.util.List;

/**
 * @Author: seeTools
 * @Date: 2023/10/14  13:20
 * @Version 1.0
 */
public interface BaseService<T> extends IService<T> {


    /**
     * 根据字段获取数据
     *
     * @param field 字段名称
     * @param value 字段值
     * @return
     */
    List<T> findBy(String field, String value);

    /**
     * 根据字段获取数据
     *
     * @param key
     * @param value
     * @param <E>
     * @param <V>
     * @return
     */
    <E, V> List<T> findBy(SFunction<E, V> key, Object value);


    /**
     * 根據ids獲取數據
     *
     * @param ids
     * @param <E>
     * @param <V>
     * @return
     */
    <E, V> List<T> findByIds(Long[] ids);

    /**
     * 根据字段获取第一条数据
     *
     * @param field
     * @param value
     * @return
     */
    T findOne(String field, String value);

    /**
     * 根据字段获取数据第一条数据
     *
     * @param key
     * @param value
     * @param <E>
     * @param <V>
     * @return
     */
    <E, V> T findOne(SFunction<E, V> key, Object value);


    /**
     * 匹配符合条件的数据
     *
     * @param field
     * @param collector
     * @return
     */
    List<T> in(String field, Collection<?> collector);

    /**
     * 模糊查询符合条件的数据
     *
     * @param key
     * @param value
     * @param <E>
     * @param <V>
     * @return
     */
    <E, V> List<T> like(SFunction<E, V> key, Object value);

    /**
     * 在锁的情况下修改数据
     *
     * @param t
     * @return
     */
    boolean updateOnLock(T t);


    /**
     * 根据IDS删除数据
     *
     * @param ids
     * @return
     */
    boolean removeBatchByIds(Long[] ids);

    /**
     * 删除所有数据
     *
     * @return
     */
    boolean removeAll();

    /**
     * 获取所有数据
     *
     * @return
     */
    List<T> findAll();
}
